package com.yeh.common.util;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * 
 * <p>Title: MD5Util</p>
 * <p>Description: 加密工具类</p>
 * <p>Company:  Co.</p>
 * <p>Package: com.yeh.common.util</p>
 * @author <a href="mailto:yehshuai@126.com">叶帅</a>  
 * <p>DateTime: 2015年9月14日 ★  上午10:07:14</p> 
 * @Version V1.0.0
 */
public class MD5Util {
	private final static char[] HEX = "0123456789abcdef".toCharArray();
	
	
	public static String md5(String str){
		byte[] bys = digest(str.getBytes(), "MD5");
 		return  bytes2Hex(bys);
	}
	
	private static byte[] digest(byte[] bys, String type) {
        if(bys == null || bys.length == 0 || type == null) {
            throw new IllegalArgumentException("argument is invalid!");
        }
        MessageDigest m = null;
        try {
            m = MessageDigest.getInstance(type);
        } catch (NoSuchAlgorithmException e) {
        }
        m.update(bys);
        return m.digest();
    } 
	
	/**
     * 将字节数组转成 16 进制的字符串来表示，每个字节采用两个字符表表示
     * 
     * @param bys       需要转换成 16 进制的字节数组
     * @return
     */
    public static String bytes2Hex(byte[] bys) {
        char[] chs = new char[bys.length * 2];
        for(int i = 0, offset = 0; i < bys.length; i++) {
            chs[offset++] = HEX[bys[i] >> 4 & 0xf];
            chs[offset++] = HEX[bys[i] & 0xf];
        }
        return new String(chs);
    }

}
